package 多线程;

/**
 * @ClassName : Demo02
 * @Author : LV88VL
 * @Date: 2021/3/6 13:51
 * @Description : 多线程面试题
 *
 *
 *1.  sleep方法和wait方法的异同点：
 *          相同点：可以让线程处于冻结状态
 *          不同点：
 *                      1。
 *                      sleep必须指定时间
 *                       wait可以指定时间，也可以不指定时间
 *                      2。
 *                      sleep时间到，线程处于临时阻塞或运行
 *                      wait如果没有指定时间，必须要通过notify或者notifyAll唤醒。
 *                      3。
 *                      sleep不一定非要定义在同步中
 *                      wait必须定义在同步中
 *
 *                      ********************重要********
 *                      4。*******************************************
 *                      都定义在同步中，且两个都放执行权
 *                      线程执行到sleep，不会释放锁=======不释放资源 ========一直占用资源
 *                      线程执行到wait会释放锁=========释放资源==============在wait中不占用资源
 *                      **********************************************
 * 2. 线程如何停止、
 *                      interrupt方法终止
 *
 *=================================================
 * 同步弊端：
 *                 1.。 降低程序性能，但能够解决多线程安全问题
 *                 2.。当线程任务出现多个同步（多个锁）时，如果同步中嵌套了其他同步，容易引发死锁
 *                 eg::::::::::::::
 *                 //Thread-0
 *                 synchronized(obj1)
 *                 {
 *                     -->thread-0 obj1
 *                     synchronized(obj2)
 *                     {
 *
 *                     }
 *                 }
 *                 //Thread-1
 *                 synchronized(obj2)
 *                 {
 *                     Thread-1 obj2
 *                     synchronized(obj1)
 *                     {
 *
 *                     }
 *                 }
 * 同步前提：必须保证多个线程是用同一把锁（相当于只有一个对象）
 * 同步的体现形式： 一、同步代码块---------------->较为常用
 *                                  synchronized（）{
 *                                    //需要被同步的代码块
 *                                  }
 *                      其中需要有一个任意对象，可以使用上帝类（Object）来创建一个对象给synchronized
 *                              二、封装思想==========同步函数
 *                                   public  synchronized void 函数名（）
 *                                   {
 *                                        //需要被同步的代码块
 *                                   }
 *                     直接让函数具备同步性，将synchronized添加在函数前
 *                     同步函数使用的资源锁（对象）是this。----->固定的
 ********************
 *                      静态同步函数的资源锁（对象）不是this，而是字节码文件的对象，类名.class
 **************************
 *=================================================
 * 3. 多线程安全问题
 * 产生原因：
 *                 线程任务中在操作共享的数据
 *                 线程任务操作共享数据的代码有多条
 * 解决思路：
 *                 只要让一个线程在执行线程任务时将多条操作共享数据的代码执行完，
 *                 在执行过程中，不要让其他线程参与运算
 *                 通过======同步代码块（synchronized）==========来解决
 *                 格式：
 *                  一、
 *                      synchronized（）{
 *                          //需要被同步的代码块
 *                      }
 *                 其中需要有一个任意对象，可以使用上帝类（Object）来创建一个对象给synchronized
 *                  二、封装思想==========同步函数
 *  *                      public  synchronized void 函数名（）
 *  *                      {
 *  *                          //需要被同步的代码块
 *  *                      }
 *                  详解：
 *                  obj相当于一个资源锁，当一个线程运行时，经过同步代码块synchronized拿到资源锁obj
 *                  当该线程的释放执行权，其他线程占用执行权时，obj资源锁没被释放，其他程序不能不能进行
 */
public class Demo02 {
}
